package LearnStatic;

/**
 *
 * static关键字的使用
 *
 * 1.static：静态的
 * 2.static可以用来修饰：属性、方法、代码块、内部类
 *
 * 3.使用static修饰属性：静态变量(或：类变量)
 *      3.1属性，按是否使用static修饰，又分为：静态属性 VS 非静态属性（实例变量）
 *          实例变量：我们创建了类的多个对象，每个对象都独立拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时，
 *          不会导致其他对象中同样属性值的修改。
 *
 *          静态变量：我们创建了类的多个对象。多个对象共享同一个静态变量。当通过某一个对象修改静态变量时，会导致其他对象
 *          调用此静态变量时，时修改过了的。
 *
 *       3.2 static修饰属性的其他说明：
 *          ①静态变量随着类的加载而加载。可以通过“类.静态变量”的方式进行调用
 *          ②静态变量的加载要早于对象的创建
 *          ③由于类只加载一次，则静态变量在内存中也只会存在一份：存在方法区的静态域中。
 *          ④       类变量       实例变量
 *          类        yes         no
 *          对象      yes          yes
 *
 *       3.3 静态属性举例：System.out; Math.PI
 *
 *
 * 4.使用static修饰方法：静态方法
 *      ①随着累的加载而加载，可以通过“类.静态方法”的方式调用
 *
 */

public class StaticTest {

    public static void main(String[] args) {

        Chinese c1 = new Chinese();
        c1.name = "PangHu";
        c1.age = 18;

        Chinese c2 = new Chinese();
        c2.name = "DaXiong";
        c2.age = 19;

        c1.nation = "CHN";
        System.out.println(c2.nation);
    }

}

class Chinese{
    String name;
    int age;
    static String nation;

    public void eat(){
        System.out.println("eat");
    }
    public static void eat1(){
        System.out.println(" do not eat");
    }

}
